/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package zonasoft.Manejadores;

import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
//import com.mysql.jdbc.ResultSet;
import java.sql.Statement;
//import java.sql.Connection;
//import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import zonasoft.Conceptos.Lider;
import zonasoft.Conceptos.Zonificados;

/**
 *
 * @author JORGE
 */
public class ManejadorQuerys {

    public static Connection con;
    public static Connection conm;

//    public static String PotencialVotos (String idPuesto){
//    
//        
//    }
//    
    public static List consultaDinamica(Map<String, Integer> filtros) throws SQLException, Exception {
        ResultSet rs = null;
        PreparedStatement pst = null;
        List zonificados=new ArrayList();
        Map<String, String> resultado = new HashMap<String, String>();
        String consultaBase = "SELECT zonificados.idzonificados,zonificados.codigo,zonificados.idlider,zonificados.idpuesto_votacion,zonificados.nombre," +
                "zonificados.apellido,zonificados.fechadenacimiento,zonificados.correo,zonificados.telefono,zonificados.barrio,zonificados.direccion," +
                "zonificados.cargo,zonificados.mesa,zonificados.sexo,zonificados.codHoja,zonificados.fechaCreacion,zonificados.idUsuario FROM "
                + "zonificacion.municipios  INNER JOIN zonificacion.departamentos "
                + " ON (municipios.cod_departamentos = departamentos.codigo)"
                + "INNER JOIN zonificacion.zona "
                + " ON (zona.idmunicipio = municipios.codigo)"
                + "INNER JOIN zonificacion.puestodevotacion "
                + " ON (puestodevotacion.idzona = zona.codigo)"
                + " INNER JOIN zonificacion.zonificados "
                + " ON (zonificados.idpuesto_votacion = puestodevotacion.idpuesto_votacion)"
                + " WHERE departamentos.codigo=5 ";

        String filtroMunicipio = (filtros.get("idMunicipio") != 0) ? " and municipios.codigo = " + filtros.get("idMunicipio") : "";
        String filtroZona = (filtros.get("idZona") != 0) ? " and puestodevotacion.idzona = " + filtros.get("idZona") : "";
        String filtroPuesto = (filtros.get("idPuesto") != 0) ? " and zonificados.idpuesto_votacion = " + filtros.get("idPuesto") : "";

        consultaBase += filtroMunicipio;
        consultaBase += filtroZona;
        consultaBase += filtroPuesto;

        try {
            pst = (PreparedStatement) con.prepareStatement(consultaBase);
            rs = pst.executeQuery();

       
//            rs = pst.executeQuery(consultaBase);
               while (rs.next()) {
                   Zonificados zon=null;
                   zon=Zonificados.load(rs);
                   zonificados.add(zon);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManejadorQuerys.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }




        }

        return zonificados;
    }

     public static List consultaDinamicaLideres(Map<String, Integer> filtros) throws SQLException, Exception {
        ResultSet rs = null;
        PreparedStatement pst = null;
        List lideres=new ArrayList();
        Map<String, String> resultado = new HashMap<String, String>();
        String consultaBase = "SELECT lider.idlider,lider.nombre,lider.apellido"+
                    " FROM "+
                     " zonificacion.municipios "+
                        " INNER JOIN zonificacion.departamentos "+
                         "   ON (municipios.cod_departamentos = departamentos.codigo) "+
                        " INNER JOIN zonificacion.zona "+
                        "    ON (zona.idmunicipio = municipios.codigo) "+
                        "INNER JOIN zonificacion.puestodevotacion "+
                        "    ON (puestodevotacion.idzona = zona.codigo) "+
                        " INNER JOIN zonificacion.lider "+
                          "  ON (lider.idPuesto = puestodevotacion.idpuesto_votacion) "+
                          " WHERE departamentos.codigo=5 ";

        String filtroDep=(filtros.get("idDep") >= 0) ? " or departamentos.codigo = " + filtros.get("idDep") : "";
        String filtroMunicipio = (filtros.get("idMunicipio") != 0) ? " and municipios.codigo = " + filtros.get("idMunicipio") : "";
        String filtroZona = (filtros.get("idZona") != 0) ? " and puestodevotacion.idzona = " + filtros.get("idZona") : "";
        String filtroPuesto = (filtros.get("idPuesto") != 0) ? " and lider.idPuesto = " + filtros.get("idPuesto") : "";

        consultaBase += filtroDep;
        consultaBase += filtroMunicipio;
        consultaBase += filtroZona;
        consultaBase += filtroPuesto;

        try {
            pst = (PreparedStatement) con.prepareStatement(consultaBase);
            rs = pst.executeQuery();


//            rs = pst.executeQuery(consultaBase);
               while (rs.next()) {
                   Lider li=null;
                   li=Lider.load2(rs);
                   lideres.add(li);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManejadorQuerys.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }




        }

        return lideres;
    }

     public static List consultaDinamicaPorLocalidad(Map<String, Integer> filtros) throws SQLException, Exception {
        ResultSet rs = null;
        PreparedStatement pst = null;
        List zonificados=new ArrayList();
        Map<String, String> resultado = new HashMap<String, String>();
        String consultaBase = "SELECT zonificados.* FROM " +
                " zonificacion.municipios " +
                " INNER JOIN zonificacion.departamentos " +
                " ON (municipios.cod_departamentos = departamentos.codigo) " +
                " INNER JOIN zonificacion.localidad " +
                " ON (localidad.idmunicipio = municipios.codigo) " +
                " ,zonificacion.puestodevotacion " +
                "  INNER JOIN zonificacion.barrio" +
                " ON (puestodevotacion.idbarrio = barrio.idBarrio)" +
                " INNER JOIN zonificacion.zonificados " +
                " ON (zonificados.idpuesto_votacion = puestodevotacion.idpuesto_votacion) " +
                " INNER JOIN zonificacion.udegobierno " +
                " ON  (barrio.iducdg = udegobierno.codigo) " +
                " WHERE udegobierno.idlocalidad = localidad.codigo " +
                " AND departamentos.codigo=5 ";
  
        String filtroMunicipio = (filtros.get("idMunicipio") != 0) ? " AND municipios.codigo = " + filtros.get("idMunicipio") : "";
        String filtroBarrio = (filtros.get("idBarrio") != 0) ? " AND barrio.idBarrio = " + filtros.get("idBarrio") : "";
        String filtroLocalidad = (filtros.get("idLocalidad") != 0) ? "  AND localidad.codigo = " + filtros.get("idLocalidad") : "";
         String filtroUnidad = (filtros.get("idUnidad") != 0) ? " AND  udegobierno.codigo = " + filtros.get("idUnidad") : "";
        consultaBase += filtroMunicipio;
        consultaBase += filtroLocalidad;
        consultaBase+=filtroBarrio;
        consultaBase += filtroUnidad;

        try {
            pst = (PreparedStatement) con.prepareStatement(consultaBase);
            rs = pst.executeQuery();


//            rs = pst.executeQuery(consultaBase);
               while (rs.next()) {
                   Zonificados zon=null;
                   zon=Zonificados.load(rs);
                   zonificados.add(zon);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManejadorQuerys.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
        }

        return zonificados;
    }

     
 public static List<String> novedades() throws SQLException, Exception{
  ResultSet rs = null;
  PreparedStatement pstmt = null;
  String sentencia = "select * from novedad";
  try{
    List<String> no = new ArrayList<String>();
	pstmt = (PreparedStatement) con.prepareStatement(sentencia);
	rs = pstmt.executeQuery();
   while(rs.next()){
       String novedad=rs.getString(1)+","+rs.getString(2)+","+rs.getString(3)+","+rs.getString(4)+","+rs.getString(5)+","+rs.getString(6)+","+rs.getString(7);
        no.add( novedad);
       }return no;
   }
  catch(Exception ex){
      ex.printStackTrace();
     throw new Exception("Resultado negativo de la base de datos" + ex.getMessage());
   }

  }

 public static List<String> AllLideresByPuesto(String idPuesto) throws SQLException
    {
     ResultSet rs = null;
        PreparedStatement pst = null;
        List<String> resultado=new ArrayList();
        String query = "SELECT CONCAT(lider.nombre,' ',lider.apellido) AS 'lider' "+
                     " ,puestodevotacion.nombre AS 'puesto' "+
                      " , barrio.nombre AS 'barrio' "+
                      ", municipios.nombre AS 'municipio' "+
                     " , departamentos.nombre AS 'departamento' "+
                     " FROM "+
                     " zonificacion.puestodevotacion "+
                     " INNER JOIN zonificacion.barrio "+
                     " ON (puestodevotacion.idbarrio = barrio.idBarrio) "+
                     " INNER JOIN zonificacion.zona "+
                    "  ON (puestodevotacion.idZona = zona.codigo) "+
                    "  INNER JOIN zonificacion.municipios "+
                    "  ON (zona.idmunicipio = municipios.codigo) "+
                     "   INNER JOIN zonificacion.lider "+
                    "  ON (lider.idPuesto = puestodevotacion.idpuesto_votacion) "+
                    "  INNER JOIN zonificacion.departamentos  "+
                    "   ON (municipios.cod_departamentos = departamentos.codigo) "+
                    " WHERE puestodevotacion.idpuesto_votacion = ? ";

      

        try {
            pst = (PreparedStatement) con.prepareStatement(query);
            pst.setString(1, idPuesto);
            rs = pst.executeQuery();


//            rs = pst.executeQuery(consultaBase);
               while (rs.next()) {
                   String line="";

                   String lider=rs.getString(1);
                   String puesto=rs.getString(2);
                   String barrio=rs.getString(3);
                   String municipio =rs.getString(4);
                   String departamento=rs.getString(5);

                   line+=lider+"~"+puesto+"~"+barrio+"~"+municipio+"~"+departamento;

                   resultado.add(line);
            }
        } catch (SQLException ex) {
            Logger.getLogger(ManejadorQuerys.class.getName()).log(Level.SEVERE, null, ex);
            ex.printStackTrace();
        } finally {
            if (rs != null) {
                rs.close();
            }
            if (pst != null) {
                pst.close();
            }
        }

        return resultado;
    }
 
 
 public static int totalZonificadosbyLider(String lider) throws SQLException{
Statement stmt  = null;
ResultSet rs = null;
int numeroZonificados = 0;

//     System.out.println("lider = " + lider);
     
String consulta = ("select count(zonificados.idlider)  "
        + "from zonificacion.zonificados inner join zonificacion.lider on"
        + "   (zonificados.idlider = lider.idlider) where "
        + "lider.idlider in (select lider.idlider from lider where concat(nombre,' ', apellido)="+ "'"+ lider+ "'"  )+")";
//     System.out.println("consulta = " + consulta);
// "+ nombre +"&& apellido ="+apellido+")" -- > comparacion que estaba haciendo antes con los datos del lider
	try{
	stmt = (Statement) con.prepareStatement(consulta);
	rs = stmt.executeQuery(consulta);
        while (rs.next()){
	 numeroZonificados = rs.getInt(1);
       //  System.out.print("numeroZonificados = " + numeroZonificados);
      
	}
        } catch (SQLException ex) {
            ex.printStackTrace();
        }finally{
          if( stmt!=null){
              stmt.close();
          }
                  }
   return numeroZonificados;
       
     }// fin del metodo


}
//Fin de la clase
